#include <iostream>

// 50. pow(x, n)
// 实现 pow(x, n) ，即计算 x 的整数 n 次幂函数（即，x^n ）。

class Solution {
public:
    double myPow(double x, int n) {
        double res = myPositivePow(x, abs((long)n));
        if(n < 0) res = 1.0 / res;
        return res;
    }

private:
    // 计算x^n，其中n >= 0的整数
    double myPositivePow(double x, long n)
    {
        if(n == 0)
            return 1;
        // n 为奇数
        if(n % 2 == 1)
            return x * myPositivePow(x, n-1);
        // n 为偶数
        return myPositivePow(x*x, n / 2);
    }
};

int main() {
    std::cout << Solution().myPow(2.0, 10) << std::endl;    // 1024.00
    std::cout << Solution().myPow(2.1, 3) << std::endl; // 9.261
    std::cout << Solution().myPow(2.0, -2) << std::endl;    // 0.25
    std::cout << Solution().myPow(1.0, -2147483648) << std::endl;    // 1
    return 0;
}
